﻿using System;
using System.Web.Mvc;
using Metier;
using WebApp;
using Poco;
using System.Collections.Generic;
using System.Data.Objects.DataClasses;

namespace WebApp.Controllers
{
    public class HomeController : Controller
    {

        public HomeController() : base()
        {
            ViewBag.Home = "/Home/Index";
        }

        public ActionResult Index()
        {      
            try
            {

                if (Session["commande"] == null)
                {
                    //set commandemodelview in Session var
                    Session["commande"] = new CommandModelView();                    
                }

            }
            catch (Exception e){FlashHelpers.FlashError(this, "Erreur pendant la récuperation de la commande");}

            return View();
        }

        public ActionResult Listplats(string type)
        {
            
            GestionPlat plats_manager = new GestionPlat();
            CommandModelView modelviewcommand = new CommandModelView();            
            try
            {
                modelviewcommand.All_Plats = plats_manager.Lister(type);
            }
            catch (Exception e)
            {
                FlashHelpers.FlashError(this, "Erreur pendant la récuperation de la commande");
            }
            
            return View(modelviewcommand);
        }

        public ActionResult AjouterPlat(int id){
        
            GestionPlat plat_manager = new GestionPlat();
            //Check commande Session exists
            if (Session["commande"] == null)
                FlashHelpers.FlashError(this, "Erreur pendant la récuperation de la commande");
            else
            {                
                try
                {
                    //gets plat object corresponding the id
                    Plat plat = plat_manager.Chercher(id);

                    //init modelviewcommand corresponding Session var
                    CommandModelView modelviewcommand = (CommandModelView)Session["commande"];

                    //Adds plat to commande
                    modelviewcommand.All_Commande.Add(plat);

                    //Sends success message
                    FlashHelpers.FlashSuccess(this, "Votre plat " + plat.Nom + " a bien été ajouté à votre commande." );                    
                }
                catch (Exception e)
                {
                    FlashHelpers.FlashError(this, "une erreur s'est produite pendant l'ajout du plat.");
                }
            }

            return RedirectToAction("Index");
            //return PartialView("AjaxResponse");
        }

        public ActionResult Commander()
        {

            //Check commande Session exists
            if (Session["commande"] == null)
                FlashHelpers.FlashError(this, "Erreur pendant la récuperation de la commande");
            else
            {
                try
                {
                    GestionPlat plat_manager = new GestionPlat();
                    GestionCommande commande_manager = new GestionCommande();
                    GestionTable table_manager = new GestionTable();
                    GestionServeur serveur_manager = new GestionServeur();

                    //init modelviewcommand corresponding Session var
                    CommandModelView modelviewcommand = (CommandModelView)Session["commande"];

                    Commande command = new Commande();

                    List<Plat> plats = modelviewcommand.All_Commande;
                    
                    //Adding commanded plats to the command
                    /*foreach( var item in modelviewcommand.All_Commande){
                        plats_coll.Add(item);
                    }*/

                    Table tableCommande = table_manager.Chercher(User.Identity.Name);

                    //Starts command
                    commande_manager.nouvelleCommande(plats, tableCommande);
                    
                    //Sends success message
                    FlashHelpers.FlashSuccess(this, "Votre commande a été effectué");
                    
                   
                }
                catch (Exception e)
                {
                    FlashHelpers.FlashError(this, "une erreur s'est produite pendant le passage de votre commande.");
                }
            }
            return RedirectToAction("Index");
        }


    }
}
